package com.phiture.erp.stock.core.service;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import com.phiture.erp.stock.core.pojo.dto.ErpStockPageReqDTO;
import com.phiture.erp.stock.dal.entity.ErpStockDO;

import java.math.BigDecimal;

/**
 * @author YH
 * @date 2025/4/13
 */
public interface ErpStockService {
    /**
     * 获得物料库存
     *
     * @param id 编号
     * @return 库存
     */
    ErpStockDO getStock(Long id);

    /**
     * 基于物料 + 仓库，获得物料库存
     *
     * @param materialId 物料编号
     * @param warehouseId 仓库编号
     * @return 物料库存
     */
    ErpStockDO getStock(Long materialId, Long warehouseId);

    /**
     * 获得物料库存数量
     *
     * 如果不存在库存记录，则返回 0
     *
     * @param warehouseId 仓库编号
     * @param materialId 物料编号
     * @return 物料库存数量
     */
    BigDecimal getStockCount(Long warehouseId, Long materialId);

    /**
     * 获得物料库存分页
     *
     * @param pageReqDTO 分页查询
     * @return 库存分页
     */
    PageResult<ErpStockDO> getStockPage(ErpStockPageReqDTO pageReqDTO);

    /**
     * 增量更新物料库存数量
     *
     * @param materialId 物料编号
     * @param warehouseId 仓库编号
     * @param count 增量数量：正数，表示增加；负数，表示减少
     * @return 更新后的库存
     */
    BigDecimal updateStockCountIncrement(Long materialId, Long warehouseId, BigDecimal count);
}
